{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "27e86681",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import LSTM\n",
    "from tensorflow.keras.layers import Dense, Dropout\n",
    "import pandas as pd\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "59a416cd",
   "metadata": {},
   "outputs": [],
   "source": [
    "df=pd.read_csv(\"train.csv\",parse_dates=[\"Date\"],index_col=[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ab54faea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "None\n"
     ]
    }
   ],
   "source": [
    "print(df.index.freq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9d69a828",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5203, 5)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1fe6f18e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2001-01-25</th>\n",
       "      <td>356.730774</td>\n",
       "      <td>362.980774</td>\n",
       "      <td>352.403839</td>\n",
       "      <td>353.365387</td>\n",
       "      <td>197.122452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-26</th>\n",
       "      <td>357.211548</td>\n",
       "      <td>360.096161</td>\n",
       "      <td>342.788452</td>\n",
       "      <td>343.269226</td>\n",
       "      <td>191.490234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-29</th>\n",
       "      <td>345.153839</td>\n",
       "      <td>355.769226</td>\n",
       "      <td>338.461548</td>\n",
       "      <td>341.384613</td>\n",
       "      <td>190.439011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-30</th>\n",
       "      <td>344.307678</td>\n",
       "      <td>355.923065</td>\n",
       "      <td>341.692322</td>\n",
       "      <td>355.769226</td>\n",
       "      <td>198.463318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001-01-31</th>\n",
       "      <td>359.615387</td>\n",
       "      <td>361.153839</td>\n",
       "      <td>350.461548</td>\n",
       "      <td>353.692322</td>\n",
       "      <td>197.304749</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2001-01-25  356.730774  362.980774  352.403839  353.365387  197.122452\n",
       "2001-01-26  357.211548  360.096161  342.788452  343.269226  191.490234\n",
       "2001-01-29  345.153839  355.769226  338.461548  341.384613  190.439011\n",
       "2001-01-30  344.307678  355.923065  341.692322  355.769226  198.463318\n",
       "2001-01-31  359.615387  361.153839  350.461548  353.692322  197.304749"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "750dae9a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-09-23</th>\n",
       "      <td>99.529999</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>99.519997</td>\n",
       "      <td>102.959999</td>\n",
       "      <td>102.789993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-24</th>\n",
       "      <td>102.660004</td>\n",
       "      <td>104.199997</td>\n",
       "      <td>102.599998</td>\n",
       "      <td>103.800003</td>\n",
       "      <td>103.709198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-27</th>\n",
       "      <td>104.550003</td>\n",
       "      <td>106.330002</td>\n",
       "      <td>104.389999</td>\n",
       "      <td>105.349998</td>\n",
       "      <td>105.257835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-28</th>\n",
       "      <td>105.290001</td>\n",
       "      <td>106.750000</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>105.730003</td>\n",
       "      <td>105.637512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-29</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>105.309998</td>\n",
       "      <td>106.279999</td>\n",
       "      <td>106.187027</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2021-09-23   99.529999  104.080002   99.519997  102.959999  102.789993\n",
       "2021-09-24  102.660004  104.199997  102.599998  103.800003  103.709198\n",
       "2021-09-27  104.550003  106.330002  104.389999  105.349998  105.257835\n",
       "2021-09-28  105.290001  106.750000  104.730003  105.730003  105.637512\n",
       "2021-09-29  106.000000  107.000000  105.309998  106.279999  106.187027"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9f685196",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_split=round(len(df)*0.20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c435d2e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1041"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6815e6cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_for_training=df[:-1041]\n",
    "df_for_testing=df[-1041:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "164f3e06",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4162, 5)\n",
      "(1041, 5)\n"
     ]
    }
   ],
   "source": [
    "print(df_for_training.shape)\n",
    "print(df_for_testing.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4a86012c",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = MinMaxScaler(feature_range=(0,1))\n",
    "df_for_training_scaled = scaler.fit_transform(df_for_training)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5697bff5",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_for_testing_scaled=scaler.transform(df_for_testing)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d33a6b6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.85398707, 0.86281807, 0.85292546, 0.8403402 , 0.82180889],\n",
       "       [0.85533406, 0.85473269, 0.82623316, 0.8122593 , 0.79289309],\n",
       "       [0.82155169, 0.84260459, 0.81422168, 0.80701755, 0.78749611],\n",
       "       ...,\n",
       "       [0.40689652, 0.40362224, 0.41960282, 0.40436458, 0.7632948 ],\n",
       "       [0.40517242, 0.39995691, 0.41832161, 0.4075738 , 0.76889077],\n",
       "       [0.40862067, 0.39974127, 0.41426436, 0.39880189, 0.75359571]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_training_scaled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "03b668b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4162, 5)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_training_scaled.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "88390259",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1041, 5)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_for_testing_scaled.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "b6a58026",
   "metadata": {},
   "outputs": [],
   "source": [
    "def createXY(dataset,n_past):\n",
    "    dataX = []\n",
    "    dataY = []\n",
    "    for i in range(n_past, len(dataset)):\n",
    "            dataX.append(dataset[i - n_past:i, 0:dataset.shape[1]])\n",
    "            dataY.append(dataset[i,0])\n",
    "    return np.array(dataX),np.array(dataY)        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "18b62d65",
   "metadata": {},
   "outputs": [],
   "source": [
    "trainX,trainY=createXY(df_for_training_scaled,30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "8d694c12",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4132, 30, 5)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainX.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2795bf2a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "184bfdb6",
   "metadata": {},
   "outputs": [],
   "source": [
    "testX,testY=createXY(df_for_testing_scaled,30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "5e77d396",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.85398707, 0.86281807, 0.85292546, 0.8403402 , 0.82180889],\n",
       "       [0.85533406, 0.85473269, 0.82623316, 0.8122593 , 0.79289309],\n",
       "       [0.82155169, 0.84260459, 0.81422168, 0.80701755, 0.78749611],\n",
       "       [0.81918098, 0.84303579, 0.82319031, 0.8470261 , 0.8286929 ],\n",
       "       [0.86206895, 0.85769729, 0.84753366, 0.84124952, 0.8227448 ],\n",
       "       [0.85668106, 0.85295391, 0.85479397, 0.84659822, 0.82825271],\n",
       "       [0.85129307, 0.85661925, 0.85372629, 0.84766796, 0.82935384],\n",
       "       [0.8540948 , 0.88249248, 0.85799703, 0.88125807, 0.86394198],\n",
       "       [0.88577588, 0.88227684, 0.88255396, 0.87590928, 0.85843431],\n",
       "       [0.88189657, 0.87602422, 0.87016871, 0.86200256, 0.84411479],\n",
       "       [0.88362063, 0.88357053, 0.87892376, 0.86606763, 0.84829995],\n",
       "       [0.87047413, 0.86200956, 0.84390347, 0.8344031 , 0.81569511],\n",
       "       [0.83857758, 0.87645542, 0.84966903, 0.87398378, 0.85645156],\n",
       "       [0.88168102, 0.88012075, 0.88105913, 0.86649551, 0.84874037],\n",
       "       [0.87090514, 0.86287196, 0.85949177, 0.84724008, 0.82891342],\n",
       "       [0.85237065, 0.88249248, 0.8601324 , 0.88403941, 0.86680588],\n",
       "       [0.85668106, 0.86589053, 0.86248134, 0.8630723 , 0.84521599],\n",
       "       [0.87176726, 0.8870203 , 0.88191333, 0.87783486, 0.86041721],\n",
       "       [0.88254305, 0.89003888, 0.88298101, 0.86949083, 0.85182511],\n",
       "       [0.875     , 0.86955587, 0.85821051, 0.86521178, 0.84741896],\n",
       "       [0.85775864, 0.85877534, 0.83600253, 0.84552848, 0.82715127],\n",
       "       [0.86745685, 0.88055195, 0.86120008, 0.88403941, 0.86680588],\n",
       "       [0.87780172, 0.88033639, 0.87828313, 0.88446729, 0.86724607],\n",
       "       [0.88900862, 0.88551106, 0.84838778, 0.85237489, 0.83420073],\n",
       "       [0.83512929, 0.83872361, 0.83365367, 0.83975181, 0.82120263],\n",
       "       [0.83189656, 0.82988361, 0.82532568, 0.81108261, 0.79168158],\n",
       "       [0.81896551, 0.82341526, 0.82703399, 0.82199401, 0.80649534],\n",
       "       [0.85129307, 0.85015098, 0.84240872, 0.8292683 , 0.81401255],\n",
       "       [0.83448273, 0.84282023, 0.84561178, 0.84124952, 0.82639405],\n",
       "       [0.84913791, 0.84497632, 0.83557547, 0.83889605, 0.82396218]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainX[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "bdaf6a49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trainX Shape--  (4132, 30, 5)\n",
      "trainY Shape--  (4132,)\n"
     ]
    }
   ],
   "source": [
    "print(\"trainX Shape-- \",trainX.shape)\n",
    "print(\"trainY Shape-- \",trainY.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "0c78e7db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "testX Shape--  (1011, 30, 5)\n",
      "testY Shape--  (1011,)\n"
     ]
    }
   ],
   "source": [
    "print(\"testX Shape-- \",testX.shape)\n",
    "print(\"testY Shape-- \",testY.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "cbf9d2df",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "trainX[0]-- \n",
      " [[0.85398707 0.86281807 0.85292546 0.8403402  0.82180889]\n",
      " [0.85533406 0.85473269 0.82623316 0.8122593  0.79289309]\n",
      " [0.82155169 0.84260459 0.81422168 0.80701755 0.78749611]\n",
      " [0.81918098 0.84303579 0.82319031 0.8470261  0.8286929 ]\n",
      " [0.86206895 0.85769729 0.84753366 0.84124952 0.8227448 ]\n",
      " [0.85668106 0.85295391 0.85479397 0.84659822 0.82825271]\n",
      " [0.85129307 0.85661925 0.85372629 0.84766796 0.82935384]\n",
      " [0.8540948  0.88249248 0.85799703 0.88125807 0.86394198]\n",
      " [0.88577588 0.88227684 0.88255396 0.87590928 0.85843431]\n",
      " [0.88189657 0.87602422 0.87016871 0.86200256 0.84411479]\n",
      " [0.88362063 0.88357053 0.87892376 0.86606763 0.84829995]\n",
      " [0.87047413 0.86200956 0.84390347 0.8344031  0.81569511]\n",
      " [0.83857758 0.87645542 0.84966903 0.87398378 0.85645156]\n",
      " [0.88168102 0.88012075 0.88105913 0.86649551 0.84874037]\n",
      " [0.87090514 0.86287196 0.85949177 0.84724008 0.82891342]\n",
      " [0.85237065 0.88249248 0.8601324  0.88403941 0.86680588]\n",
      " [0.85668106 0.86589053 0.86248134 0.8630723  0.84521599]\n",
      " [0.87176726 0.8870203  0.88191333 0.87783486 0.86041721]\n",
      " [0.88254305 0.89003888 0.88298101 0.86949083 0.85182511]\n",
      " [0.875      0.86955587 0.85821051 0.86521178 0.84741896]\n",
      " [0.85775864 0.85877534 0.83600253 0.84552848 0.82715127]\n",
      " [0.86745685 0.88055195 0.86120008 0.88403941 0.86680588]\n",
      " [0.87780172 0.88033639 0.87828313 0.88446729 0.86724607]\n",
      " [0.88900862 0.88551106 0.84838778 0.85237489 0.83420073]\n",
      " [0.83512929 0.83872361 0.83365367 0.83975181 0.82120263]\n",
      " [0.83189656 0.82988361 0.82532568 0.81108261 0.79168158]\n",
      " [0.81896551 0.82341526 0.82703399 0.82199401 0.80649534]\n",
      " [0.85129307 0.85015098 0.84240872 0.8292683  0.81401255]\n",
      " [0.83448273 0.84282023 0.84561178 0.84124952 0.82639405]\n",
      " [0.84913791 0.84497632 0.83557547 0.83889605 0.82396218]]\n",
      "\n",
      "trainY[0]--  0.8297413960482309\n"
     ]
    }
   ],
   "source": [
    "print(\"trainX[0]-- \\n\",trainX[0])\n",
    "print(\"\\ntrainY[0]-- \",trainY[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "a5892e85",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8297413960482309"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainY[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "713712db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4132,)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainY.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "d165e52b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.wrappers.scikit_learn import KerasRegressor\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "42ffe2bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\SUJAN~1.ISL\\AppData\\Local\\Temp/ipykernel_11732/1694479593.py:11: DeprecationWarning: KerasRegressor is deprecated, use Sci-Keras (https://github.com/adriangb/scikeras) instead.\n",
      "  grid_model = KerasRegressor(build_fn=build_model,verbose=1,validation_data=(testX,testY))\n"
     ]
    }
   ],
   "source": [
    "def build_model(optimizer):\n",
    "    grid_model = Sequential()\n",
    "    grid_model.add(LSTM(50,return_sequences=True,input_shape=(30,5)))\n",
    "    grid_model.add(LSTM(50))\n",
    "    grid_model.add(Dropout(0.2))\n",
    "    grid_model.add(Dense(1))\n",
    "\n",
    "    grid_model.compile(loss = 'mse',optimizer = optimizer)\n",
    "    return grid_model\n",
    "\n",
    "grid_model = KerasRegressor(build_fn=build_model,verbose=1,validation_data=(testX,testY))\n",
    "parameters = {'batch_size' : [16,20],\n",
    "              'epochs' : [8,10],\n",
    "              'optimizer' : ['adam','Adadelta'] }\n",
    "\n",
    "grid_search  = GridSearchCV(estimator = grid_model,\n",
    "                            param_grid = parameters,\n",
    "                            cv = 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "1fc54625",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/8\n",
      "130/130 [==============================] - 6s 23ms/step - loss: 0.0045 - val_loss: 0.0024\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 2s 17ms/step - loss: 0.0012 - val_loss: 0.0017\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 9.0876e-04 - val_loss: 0.0014\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 2s 17ms/step - loss: 8.8440e-04 - val_loss: 0.0016\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 8.2294e-04 - val_loss: 0.0018\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 7.0709e-04 - val_loss: 0.0013\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 8.3741e-04 - val_loss: 0.0011\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 7.1207e-04 - val_loss: 0.0017\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0061\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 6s 25ms/step - loss: 0.0111 - val_loss: 0.0011\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.0029 - val_loss: 5.4374e-04\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0026 - val_loss: 6.5927e-04\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0024 - val_loss: 1.5511e-04\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0024 - val_loss: 1.4759e-04\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0021 - val_loss: 2.3574e-04\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0021 - val_loss: 2.6727e-04\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0019 - val_loss: 1.3201e-04\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 1.3788e-04\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 6s 23ms/step - loss: 0.0619 - val_loss: 0.0053\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0558 - val_loss: 0.0043\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0489 - val_loss: 0.0033\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0416 - val_loss: 0.0025\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0354 - val_loss: 0.0018\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0285 - val_loss: 0.0013\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0225 - val_loss: 9.9643e-04\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0178 - val_loss: 9.0072e-04\n",
      "130/130 [==============================] - 1s 5ms/step - loss: 0.0809\n",
      "Epoch 1/8\n",
      "130/130 [==============================] - 6s 24ms/step - loss: 0.3296 - val_loss: 0.0131\n",
      "Epoch 2/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.3091 - val_loss: 0.0113\n",
      "Epoch 3/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.2856 - val_loss: 0.0095\n",
      "Epoch 4/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.2617 - val_loss: 0.0078\n",
      "Epoch 5/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.2376 - val_loss: 0.0062\n",
      "Epoch 6/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.2149 - val_loss: 0.0048\n",
      "Epoch 7/8\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.1906 - val_loss: 0.0035\n",
      "Epoch 8/8\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.1665 - val_loss: 0.0025\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 0.0406\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 6s 25ms/step - loss: 0.0050 - val_loss: 0.0024\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0012 - val_loss: 0.0033\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0010 - val_loss: 0.0024\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 8.7333e-04 - val_loss: 0.0017\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 9.6562e-04 - val_loss: 0.0026\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 7.7910e-04 - val_loss: 0.0011\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 8.4658e-04 - val_loss: 0.0012\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 7.0317e-04 - val_loss: 0.0016\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 6.8117e-04 - val_loss: 0.0014\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 6.4499e-04 - val_loss: 9.2790e-04\n",
      "130/130 [==============================] - 1s 7ms/step - loss: 0.0093\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 6s 23ms/step - loss: 0.0140 - val_loss: 6.1009e-04\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0029 - val_loss: 3.5661e-04\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0028 - val_loss: 4.1601e-04\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0026 - val_loss: 1.4354e-04\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0023 - val_loss: 2.6037e-04\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0022 - val_loss: 5.0231e-04\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0023 - val_loss: 1.4798e-04\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0020 - val_loss: 1.6298e-04\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0018 - val_loss: 1.5584e-04\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 2s 18ms/step - loss: 0.0018 - val_loss: 1.3824e-04\n",
      "130/130 [==============================] - 1s 6ms/step - loss: 1.3508e-04\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 6s 24ms/step - loss: 0.1327 - val_loss: 0.0152\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.1190 - val_loss: 0.0130\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.1055 - val_loss: 0.0108\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0930 - val_loss: 0.0088\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.0805 - val_loss: 0.0070\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.0690 - val_loss: 0.0054\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0570 - val_loss: 0.0040\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0476 - val_loss: 0.0029\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.0380 - val_loss: 0.0020\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0298 - val_loss: 0.0014\n",
      "130/130 [==============================] - 1s 7ms/step - loss: 0.0926\n",
      "Epoch 1/10\n",
      "130/130 [==============================] - 6s 26ms/step - loss: 0.1676 - val_loss: 0.0062\n",
      "Epoch 2/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.1418 - val_loss: 0.0047\n",
      "Epoch 3/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.1201 - val_loss: 0.0034\n",
      "Epoch 4/10\n",
      "130/130 [==============================] - 3s 19ms/step - loss: 0.1034 - val_loss: 0.0023\n",
      "Epoch 5/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0823 - val_loss: 0.0014\n",
      "Epoch 6/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0659 - val_loss: 8.7395e-04\n",
      "Epoch 7/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0519 - val_loss: 6.4540e-04\n",
      "Epoch 8/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0410 - val_loss: 7.2971e-04\n",
      "Epoch 9/10\n",
      "130/130 [==============================] - 2s 19ms/step - loss: 0.0296 - val_loss: 0.0011\n",
      "Epoch 10/10\n",
      "130/130 [==============================] - 3s 20ms/step - loss: 0.0234 - val_loss: 0.0017\n",
      "130/130 [==============================] - 1s 7ms/step - loss: 8.2772e-04\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 5s 25ms/step - loss: 0.0041 - val_loss: 0.0011\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0012 - val_loss: 9.3332e-04\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 9.8285e-04 - val_loss: 8.4572e-04\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 9.3753e-04 - val_loss: 9.7374e-04\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 8.6342e-04 - val_loss: 8.9776e-04\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 8.4445e-04 - val_loss: 0.0011\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 7.8490e-04 - val_loss: 5.4684e-04\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 6.7601e-04 - val_loss: 5.3758e-04\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0045\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 6s 25ms/step - loss: 0.0162 - val_loss: 0.0028\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.0035 - val_loss: 6.2902e-04\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0028 - val_loss: 3.7858e-04\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0028 - val_loss: 3.3770e-04\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0028 - val_loss: 4.2632e-04\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0024 - val_loss: 2.2002e-04\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0026 - val_loss: 4.0730e-04\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0021 - val_loss: 1.6472e-04\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 1.4469e-04\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 5s 27ms/step - loss: 0.0387 - val_loss: 0.0030\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0350 - val_loss: 0.0022\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0287 - val_loss: 0.0016\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0245 - val_loss: 0.0012\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0203 - val_loss: 8.2166e-04\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0170 - val_loss: 6.1919e-04\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.0137 - val_loss: 5.3654e-04\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0118 - val_loss: 5.5950e-04\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0437\n",
      "Epoch 1/8\n",
      "104/104 [==============================] - 5s 25ms/step - loss: 0.4360 - val_loss: 0.0241\n",
      "Epoch 2/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.4077 - val_loss: 0.0217\n",
      "Epoch 3/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.3787 - val_loss: 0.0192\n",
      "Epoch 4/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.3537 - val_loss: 0.0168\n",
      "Epoch 5/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.3256 - val_loss: 0.0145\n",
      "Epoch 6/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.2958 - val_loss: 0.0123\n",
      "Epoch 7/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.2700 - val_loss: 0.0101\n",
      "Epoch 8/8\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.2415 - val_loss: 0.0082\n",
      "104/104 [==============================] - 1s 7ms/step - loss: 0.0798\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 6s 25ms/step - loss: 0.0048 - val_loss: 0.0033\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0012 - val_loss: 0.0020\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.0012 - val_loss: 0.0022\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 9.3055e-04 - val_loss: 0.0019\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 8.9744e-04 - val_loss: 0.0021\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 8.1779e-04 - val_loss: 0.0014\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 2s 23ms/step - loss: 8.1245e-04 - val_loss: 0.0020\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 2s 24ms/step - loss: 8.0051e-04 - val_loss: 0.0022\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 6.9432e-04 - val_loss: 0.0015\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 6.2016e-04 - val_loss: 0.0013\n",
      "104/104 [==============================] - 1s 7ms/step - loss: 0.0104\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 6s 28ms/step - loss: 0.0130 - val_loss: 4.6528e-04\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.0031 - val_loss: 4.5892e-04\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.0028 - val_loss: 3.2218e-04\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.0027 - val_loss: 1.8599e-04\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.0025 - val_loss: 1.9228e-04\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.0027 - val_loss: 1.8521e-04\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.0024 - val_loss: 1.5056e-04\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 2s 23ms/step - loss: 0.0020 - val_loss: 3.5268e-04\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 0.0021 - val_loss: 2.0168e-04\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 2s 23ms/step - loss: 0.0020 - val_loss: 1.3420e-04\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 1.5619e-04\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 5s 25ms/step - loss: 0.1901 - val_loss: 0.0253\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.1784 - val_loss: 0.0230\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 0.1643 - val_loss: 0.0209\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.1531 - val_loss: 0.0187\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.1419 - val_loss: 0.0166\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 2s 20ms/step - loss: 0.1297 - val_loss: 0.0145\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 0.1159 - val_loss: 0.0126\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 0.1060 - val_loss: 0.0108\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 3s 28ms/step - loss: 0.0945 - val_loss: 0.0091\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 3s 25ms/step - loss: 0.0833 - val_loss: 0.0075\n",
      "104/104 [==============================] - 1s 5ms/step - loss: 0.2128\n",
      "Epoch 1/10\n",
      "104/104 [==============================] - 6s 25ms/step - loss: 0.3825 - val_loss: 0.0222\n",
      "Epoch 2/10\n",
      "104/104 [==============================] - 2s 19ms/step - loss: 0.3530 - val_loss: 0.0197\n",
      "Epoch 3/10\n",
      "104/104 [==============================] - 2s 21ms/step - loss: 0.3224 - val_loss: 0.0173\n",
      "Epoch 4/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.2969 - val_loss: 0.0149\n",
      "Epoch 5/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.2642 - val_loss: 0.0126\n",
      "Epoch 6/10\n",
      "104/104 [==============================] - 2s 23ms/step - loss: 0.2371 - val_loss: 0.0104\n",
      "Epoch 7/10\n",
      "104/104 [==============================] - 3s 24ms/step - loss: 0.2087 - val_loss: 0.0084\n",
      "Epoch 8/10\n",
      "104/104 [==============================] - 2s 23ms/step - loss: 0.1806 - val_loss: 0.0065\n",
      "Epoch 9/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.1530 - val_loss: 0.0049\n",
      "Epoch 10/10\n",
      "104/104 [==============================] - 2s 22ms/step - loss: 0.1281 - val_loss: 0.0035\n",
      "104/104 [==============================] - 1s 6ms/step - loss: 0.0401\n",
      "Epoch 1/8\n",
      "207/207 [==============================] - 7s 21ms/step - loss: 0.0069 - val_loss: 2.0161e-04\n",
      "Epoch 2/8\n",
      "207/207 [==============================] - 4s 19ms/step - loss: 0.0019 - val_loss: 3.6436e-04\n",
      "Epoch 3/8\n",
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0017 - val_loss: 1.9528e-04\n",
      "Epoch 4/8\n",
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0016 - val_loss: 2.2016e-04\n",
      "Epoch 5/8\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0014 - val_loss: 2.0823e-04\n",
      "Epoch 6/8\n",
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0014 - val_loss: 1.4749e-04\n",
      "Epoch 7/8\n",
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0013 - val_loss: 1.3235e-04\n",
      "Epoch 8/8\n",
      "207/207 [==============================] - 4s 20ms/step - loss: 0.0012 - val_loss: 1.1994e-04\n"
     ]
    }
   ],
   "source": [
    "grid_search = grid_search.fit(trainX,trainY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a9e26e10",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'batch_size': 20, 'epochs': 8, 'optimizer': 'adam'}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "d6851ffc",
   "metadata": {},
   "outputs": [],
   "source": [
    "my_model=grid_search.best_estimator_.model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "9f0b2e50",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<keras.engine.sequential.Sequential at 0x20bd0704b20>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "my_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "eeb97d64",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction=my_model.predict(testX)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "8699c0d3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prediction\n",
      " [[0.36429983]\n",
      " [0.36749688]\n",
      " [0.37060487]\n",
      " ...\n",
      " [0.1306538 ]\n",
      " [0.13263184]\n",
      " [0.13514471]]\n",
      "\n",
      "Prediction Shape- (1011, 1)\n"
     ]
    }
   ],
   "source": [
    "print(\"prediction\\n\", prediction)\n",
    "print(\"\\nPrediction Shape-\",prediction.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "2be6090a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1011, 1)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "c8c654a6",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "non-broadcastable output operand with shape (1011,1) doesn't match the broadcast shape (1011,5)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32mC:\\Users\\SUJAN~1.ISL\\AppData\\Local\\Temp/ipykernel_11732/1176355301.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mscaler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprediction\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\.conda\\envs\\env1\\lib\\site-packages\\sklearn\\preprocessing\\_data.py\u001b[0m in \u001b[0;36minverse_transform\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m    527\u001b[0m         )\n\u001b[0;32m    528\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 529\u001b[1;33m         \u001b[0mX\u001b[0m \u001b[1;33m-=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmin_\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    530\u001b[0m         \u001b[0mX\u001b[0m \u001b[1;33m/=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscale_\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    531\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: non-broadcastable output operand with shape (1011,1) doesn't match the broadcast shape (1011,5)"
     ]
    }
   ],
   "source": [
    "scaler.inverse_transform(prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "44862c61",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_copies_array = np.repeat(prediction,5, axis=-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "1dbd500f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1011, 5)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction_copies_array.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "3b00bd6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.36429983, 0.36429983, 0.36429983, 0.36429983, 0.36429983],\n",
       "       [0.36749688, 0.36749688, 0.36749688, 0.36749688, 0.36749688],\n",
       "       [0.37060487, 0.37060487, 0.37060487, 0.37060487, 0.37060487],\n",
       "       ...,\n",
       "       [0.1306538 , 0.1306538 , 0.1306538 , 0.1306538 , 0.1306538 ],\n",
       "       [0.13263184, 0.13263184, 0.13263184, 0.13263184, 0.13263184],\n",
       "       [0.13514471, 0.13514471, 0.13514471, 0.13514471, 0.13514471]],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction_copies_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "84f2780a",
   "metadata": {},
   "outputs": [],
   "source": [
    "pred=scaler.inverse_transform(np.reshape(prediction_copies_array,(len(prediction),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "2c86afce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([181.9501  , 183.09119 , 184.20052 , ...,  98.556435,  99.26244 ,\n",
       "       100.15935 ], dtype=float32)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "4ec05dff",
   "metadata": {},
   "outputs": [],
   "source": [
    "original_copies_array = np.repeat(testY,5, axis=-1)\n",
    "\n",
    "original_copies_array.shape\n",
    "\n",
    "original=scaler.inverse_transform(np.reshape(original_copies_array,(len(testY),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "442e0222",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([181.9501  , 183.09119 , 184.20052 , ...,  98.556435,  99.26244 ,\n",
       "       100.15935 ], dtype=float32)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "cecfd7bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pred Values--  [181.9501   183.09119  184.20052  ...  98.556435  99.26244  100.15935 ]\n",
      "\n",
      "Original Values--  [191.692307 193.461533 192.307693 ... 104.550003 105.290001 106.      ]\n"
     ]
    }
   ],
   "source": [
    "print(\"Pred Values-- \" ,pred)\n",
    "print(\"\\nOriginal Values-- \",original)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b1986d23",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "07e37414",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "bfa9b94b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABZyklEQVR4nO3dd1yVdfvA8c/FkOUWxK1oaqKCA1fmyN2yx7aVWllWv/awbNn2Kdv2VGZaWpmV2TAzZ5maE3Nv3BMVBRUEGdfvj/vmcEA2HI7A9/16nRfn3PO6z4FzcX+nqCqGYRiGAeDh7gAMwzCMi4dJCoZhGIaDSQqGYRiGg0kKhmEYhoNJCoZhGIaDSQqGYRiGg0kKRpkhIioil7jguN1EZHtxH9eVRGSviPSxnz8nIhMLeZzNItKzOGMzLm4mKRguJyLXicg6ETktIidE5E8RCbHXvSwi35RwPI3sBHLWfuwVkVE5ba+qS1S1uTtjKApVHaOq9+Qjpski8nqWfVuq6iJXxGVcnLzcHYBRttn/uX8FXA/8CVQE+gGp7ozLVlVVU0SkC7BQRNap6hznDUTES1VTyngMhuFg7hQMV2sD7FHVhWo5o6ozVHW/iAwAngNusf9bXg8gInVEZKaInBSRKBG5N/1gIuJpF4fsEpEzIrJGROpnPamIXC4iB/JT9KGqy4HNQCsR6SkiB0XkGRE5CnyZvszp2PVF5CcROS4iMSLyP6d1d4vIVhE5JSJzRaRhft6kfMTgISKj7OuOEZEfRKS603mHiMg+e93zWd6LTHdj9nuzTERi7ffoThEZAdwOPG1/Fr/Z2zoXQ/mIyAcicth+fCAiPva69JifFJFjInJERO7Kz7UbFxeTFAxX+xe4VETeF5ErRKRi+gr7P+IxwPeqWlFVw+1V3wEHgTrAjcAYEellr3sCGAxcBVQG7gYSnE9oJ5tpwA15FX2IpSvQElhrL64FVAcaAiOybO8JzAL2AY2Auna8iMh1WEnueiAIWGLHkat8xvAw8B+gB9b7cgr42N4/FPgUGGKvqwHUy+FcDYE/gI/sGNsA61R1AjAVGGt/Ftdms/vzQGd7n3CgI/CC0/paQBX7PRkOfCwi1fK6fuMio6rmYR4ufWB9kfwAHAcSgclARXvdy8A3TtvWxypaquS07L/AZPv5duC6HM6jwLNYX9itcomnkb1tLNaX61bgEXtdT+A84Ou0fU/goP28i30dXtkc9w9guNNrD6yE1bAYYtgK9HZ6XRtIxioCHg1857QuwN6/T9b32H5/fs7hfZkMvJ5l2V6n4+wCrnJa1x/Y6xTzOef3BTgGdHb37595FOxh6hQMl1PVFcDNACLSAfge67/OZ7PZvA5wUlXPOC3bB0TYz+tjfTnl5DHgK1XdlI/QAjX7svrjqpqYwz71gX057NcQ+FBE3nVaJlj/Oe8rYgwNgZ9FJM1pWSoQjPWeHUhfqKrxIhKTS/y5vX+5qUPm69hnL0sXk+VaErDqkIxSxBQfGSVKVVcDPwGt0hdl2eQwUF1EKjktawAcsp8fAJrkcoqbgP+IyKNFCTOXdQeABiKS3T9UB4D7VLWq08NPVZcVQwwHgCuzHNtXVQ8BR7C+7AEQEX+sIqSc4s/p/ctryOTDWMkpXQN7mVGGmKRguJRdqXmviNS0X18KDARW2JtEA41ExANAVQ8Ay4D/ioiviIRhlU+nV5ROBF4TkaZ2WXyYiDh/AR4GegOPisgDLrikVVhfwm+KSIAdY1d73XjgWRFpaV9rFRG5qZjOOx54I73iWkSC7DoMgB+Ba+z3ugLwKjn/bU8F+ojIzSLiJSI1RKSNvS4aaJxLDNOAF+xzB2IVW5Voc2LD9UxSMFwtFisJbBSRs8Ac4GdgrL1+uv0zRkT+tZ8PxipzP2xv+5KqLrDXvYdVPzEPOA1MAvycT6iq+7ESwygRybN9fkGoaipwLXAJsB+rQvwWe93PwFvAdyJyGtgEXFlMp/4QmAnME5EzWEm1k33ezcCDwLdYCeuUHVd28e/HqqR/EjgJrMOqNAbrvQy1WyX9ks3urwORwAZgI1Yjgtez2c4oxUTVTLJjGIZhWMydgmEYhuFgkoJhGIbh4LKkYPf6/EtEtog1qNaj9vLqIjJfRHbaP6vZy0VExonVg3WDiLRzVWyGYRhG9lx5p5ACPKmqoVidlx60e16OAhaqalNgof0arAq5pvZjBFYPTcMwDKMEuazzmqoewWoJgaqeEZGtWJ14rsPq/QgwBVgEPGMv/0qtmu8VIlJVRGrbx8lWYGCgNmrUyFWXYBiGUSatWbPmhKoGZbeuRHo0i0gjoC2wEgh2+qI/itUjE6yEccBpt4P2shyTQqNGjYiMjCz2eA3DMMoyEcmph73rK5rtAdBmAI+p6mnndfZdQYHaxIrICBGJFJHI48ePF2OkhmEYhkuTgoh4YyWEqar6k704WkRq2+trYw2aBdYwBs5DINcjY2gDB1WdoKoRqhoRFJTt3Y9hGIZRSK5sfSRYPSS3qup7TqtmAsPs58OAX52WD7VbIXUG4nKrTzAMwzCKnyvrFLpije++UUTW2cueA94EfhCR4VijLN5sr5uN1f0+Cmt0RTNBh2EAycnJHDx4kMTEnAZuNYzs+fr6Uq9ePby9vfO9jytbHy3FGjY4O72z2V6xxm8xDMPJwYMHqVSpEo0aNcK6ATeMvKkqMTExHDx4kJCQkHzvZ3o0G8ZFLjExkRo1apiEYBSIiFCjRo0C32GapGAYpYBJCEZhFOb3pvwmhenT4ehRd0dhGIZxUSmfSeHkSbj5ZriyuIa6N4yyzdPTkzZt2tCqVSuuvfZaYmNjC3WcyZMn89BDD+W6TUJCArfffjutW7emVatWXH755Zw9e5bY2Fg++eSTQp0XoGfPnnl2du3ZsyfNmzcnPDycrl27sn379my3u+eee9iyZUuhY7mYlc+ksGeP9XPdOreGYRilhZ+fH+vWrWPTpk1Ur16djz/+2GXn+vDDDwkODmbjxo1s2rSJSZMm4e3tXeSkkF9Tp05l/fr1DBs2jJEjR16wPjU1lYkTJxIaGuryWNyhfCcFgLvugpic5jg3DCOrLl26cOiQ1a90165dDBgwgPbt29OtWze2bdsGwG+//UanTp1o27Ytffr0ITo6Ot/HP3LkCHXr1nW8bt68OT4+PowaNYpdu3bRpk0bRo4ciaoycuRIWrVqRevWrfn+++8d+7z11lu0bt2a8PBwRo0alen4aWlp3Hnnnbzwwgu5xtG9e3eioqIAqFixIk8++STh4eEsX748013HnDlzaNeuHeHh4fTubTWsjI+P5+6776Zjx460bduWX3/9NcfzXGxKZOyji06nThnPJ0+G2rVhzBi3hWMY+fbYY8V/h9umDXzwQb42TU1NZeHChQwfPhyAESNGMH78eJo2bcrKlSv5v//7P/78808uv/xyVqxYgYgwceJExo4dy7vvvpuvc9x9993069ePH3/8kd69ezNs2DCaNm3Km2++yaZNm1hnX/+MGTNYt24d69ev58SJE3To0IHu3buzbt06fv31V1auXIm/vz8nT550HDslJYXbb7+dVq1a8fzzz+cax2+//Ubr1q0B60u+U6dOF1zD8ePHuffee1m8eDEhISGOc73xxhv06tWLL774gtjYWDp27EifPn0ICAjI13vgTuUzKdSvD/feC59/br329HRvPIZxkTt37hxt2rTh0KFDtGjRgr59+3L27FmWLVvGTTfd5NguKSkJsPpW3HLLLRw5coTz588XqJ18mzZt2L17N/PmzWPBggV06NCB5cuX4+eXaSpuli5dyuDBg/H09CQ4OJgePXqwevVq/v77b+666y78/f0BqF69umOf++67j5tvvjnXhHD77bfj5+dHo0aN+OijjwCrTuWGG264YNsVK1bQvXt3x/Wln2vevHnMnDmTd955B7CaFe/fv58WLVrk+31wl/KZFAAqVsx47uPjvjgMoyDy+R99cUuvU0hISKB///58/PHH3HnnnVStWtXxn7uzhx9+mCeeeIKBAweyaNEiXn755QKdr2LFilx//fVcf/31eHh4MHv27Gy/lAvqsssu46+//uLJJ5/E19c3222mTp1KREREpmW+vr54FuCfR1VlxowZNG/evEjxukP5rFMAqFQp43lamvviMIxSxN/fn3HjxvHuu+/i7+9PSEgI06dPB6wvwvXr1wMQFxfnqBeYMmVKgc7xzz//cOrUKQDOnz/Pli1baNiwIZUqVeLMmTOO7bp168b3339Pamoqx48fZ/HixXTs2JG+ffvy5ZdfkpCQAJCp+Gj48OFcddVV3HzzzaSkpBT+jbB17tyZxYsXs8eup0w/V//+/fnoo4+wBmqAtWvXFvlcJaX8JgXnO4WXXnJfHIZRyrRt25awsDCmTZvG1KlTmTRpEuHh4bRs2dJRofryyy9z00030b59ewIDAwt0/F27dtGjRw9at25N27ZtiYiI4IYbbqBGjRp07dqVVq1aMXLkSAYNGkRYWBjh4eH06tWLsWPHUqtWLQYMGMDAgQOJiIigTZs2jiKcdE888QRt27ZlyJAhpBXxH8KgoCAmTJjA9ddfT3h4OLfccgsAL774IsnJyYSFhdGyZUtefPHFIp2nJEl6JiuNIiIitNCT7HzzDQwZkvG6FL8PRtm2devWUlEWbVycsvv9EZE1qhqR3fbl907BblXgYFeQGYZhlGflNymEhcGHH8KIEdbrEyfcG49hGMZFoNwmhfkLhIivHmFzixutBWZqT8MwjPLbJPWdd2DNGvi/lI78RHVqmKRgGIZR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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(original, color = 'red', label = 'Real  Stock Price')\n",
    "plt.plot(pred, color = 'blue', label = 'Predicted  Stock Price')\n",
    "plt.title(' Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel(' Stock Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "441ddb80",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "3a095e22",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_30_days_past=df.iloc[-30:,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "451dafea",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-08-18</th>\n",
       "      <td>101.080002</td>\n",
       "      <td>103.470001</td>\n",
       "      <td>100.760002</td>\n",
       "      <td>101.410004</td>\n",
       "      <td>101.242561</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-19</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.820000</td>\n",
       "      <td>98.599998</td>\n",
       "      <td>99.419998</td>\n",
       "      <td>99.255844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-20</th>\n",
       "      <td>99.589996</td>\n",
       "      <td>100.669998</td>\n",
       "      <td>99.099998</td>\n",
       "      <td>100.050003</td>\n",
       "      <td>99.884804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-23</th>\n",
       "      <td>100.599998</td>\n",
       "      <td>101.480003</td>\n",
       "      <td>100.269997</td>\n",
       "      <td>100.970001</td>\n",
       "      <td>100.803284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-24</th>\n",
       "      <td>101.290001</td>\n",
       "      <td>103.510002</td>\n",
       "      <td>101.059998</td>\n",
       "      <td>103.269997</td>\n",
       "      <td>103.099487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-25</th>\n",
       "      <td>103.360001</td>\n",
       "      <td>105.129997</td>\n",
       "      <td>102.550003</td>\n",
       "      <td>104.699997</td>\n",
       "      <td>104.527122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-26</th>\n",
       "      <td>104.459999</td>\n",
       "      <td>104.620003</td>\n",
       "      <td>102.839996</td>\n",
       "      <td>103.379997</td>\n",
       "      <td>103.209305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-27</th>\n",
       "      <td>103.900002</td>\n",
       "      <td>106.150002</td>\n",
       "      <td>103.900002</td>\n",
       "      <td>106.089996</td>\n",
       "      <td>105.914825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-30</th>\n",
       "      <td>106.330002</td>\n",
       "      <td>106.459999</td>\n",
       "      <td>104.800003</td>\n",
       "      <td>105.190002</td>\n",
       "      <td>105.016312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-31</th>\n",
       "      <td>104.940002</td>\n",
       "      <td>106.360001</td>\n",
       "      <td>104.459999</td>\n",
       "      <td>105.410004</td>\n",
       "      <td>105.235954</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-01</th>\n",
       "      <td>105.360001</td>\n",
       "      <td>105.470001</td>\n",
       "      <td>103.260002</td>\n",
       "      <td>103.660004</td>\n",
       "      <td>103.488846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-02</th>\n",
       "      <td>104.000000</td>\n",
       "      <td>106.339996</td>\n",
       "      <td>103.980003</td>\n",
       "      <td>106.260002</td>\n",
       "      <td>106.084557</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-03</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.360001</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>104.750000</td>\n",
       "      <td>104.577042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-07</th>\n",
       "      <td>104.500000</td>\n",
       "      <td>104.940002</td>\n",
       "      <td>102.309998</td>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.119453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-08</th>\n",
       "      <td>102.949997</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>100.419998</td>\n",
       "      <td>102.580002</td>\n",
       "      <td>102.410629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-09</th>\n",
       "      <td>102.360001</td>\n",
       "      <td>104.919998</td>\n",
       "      <td>102.110001</td>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.119453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-10</th>\n",
       "      <td>103.290001</td>\n",
       "      <td>103.949997</td>\n",
       "      <td>101.779999</td>\n",
       "      <td>102.000000</td>\n",
       "      <td>101.831581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-13</th>\n",
       "      <td>102.650002</td>\n",
       "      <td>104.860001</td>\n",
       "      <td>102.019997</td>\n",
       "      <td>104.459999</td>\n",
       "      <td>104.287521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-14</th>\n",
       "      <td>104.540001</td>\n",
       "      <td>104.550003</td>\n",
       "      <td>100.070000</td>\n",
       "      <td>100.379997</td>\n",
       "      <td>100.214256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-15</th>\n",
       "      <td>100.790001</td>\n",
       "      <td>102.470001</td>\n",
       "      <td>100.690002</td>\n",
       "      <td>102.160004</td>\n",
       "      <td>101.991325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-16</th>\n",
       "      <td>102.389999</td>\n",
       "      <td>102.699997</td>\n",
       "      <td>100.820000</td>\n",
       "      <td>101.339996</td>\n",
       "      <td>101.172668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-17</th>\n",
       "      <td>101.150002</td>\n",
       "      <td>101.860001</td>\n",
       "      <td>100.129997</td>\n",
       "      <td>100.470001</td>\n",
       "      <td>100.304115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-20</th>\n",
       "      <td>98.500000</td>\n",
       "      <td>99.870003</td>\n",
       "      <td>97.269997</td>\n",
       "      <td>99.809998</td>\n",
       "      <td>99.645195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-21</th>\n",
       "      <td>99.900002</td>\n",
       "      <td>99.989998</td>\n",
       "      <td>96.209999</td>\n",
       "      <td>96.820000</td>\n",
       "      <td>96.660133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-22</th>\n",
       "      <td>97.669998</td>\n",
       "      <td>99.029999</td>\n",
       "      <td>97.660004</td>\n",
       "      <td>98.540001</td>\n",
       "      <td>98.377296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-23</th>\n",
       "      <td>99.529999</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>99.519997</td>\n",
       "      <td>102.959999</td>\n",
       "      <td>102.789993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-24</th>\n",
       "      <td>102.660004</td>\n",
       "      <td>104.199997</td>\n",
       "      <td>102.599998</td>\n",
       "      <td>103.800003</td>\n",
       "      <td>103.709198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-27</th>\n",
       "      <td>104.550003</td>\n",
       "      <td>106.330002</td>\n",
       "      <td>104.389999</td>\n",
       "      <td>105.349998</td>\n",
       "      <td>105.257835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-28</th>\n",
       "      <td>105.290001</td>\n",
       "      <td>106.750000</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>105.730003</td>\n",
       "      <td>105.637512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-29</th>\n",
       "      <td>106.000000</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>105.309998</td>\n",
       "      <td>106.279999</td>\n",
       "      <td>106.187027</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close\n",
       "Date                                                                  \n",
       "2021-08-18  101.080002  103.470001  100.760002  101.410004  101.242561\n",
       "2021-08-19  100.000000  100.820000   98.599998   99.419998   99.255844\n",
       "2021-08-20   99.589996  100.669998   99.099998  100.050003   99.884804\n",
       "2021-08-23  100.599998  101.480003  100.269997  100.970001  100.803284\n",
       "2021-08-24  101.290001  103.510002  101.059998  103.269997  103.099487\n",
       "2021-08-25  103.360001  105.129997  102.550003  104.699997  104.527122\n",
       "2021-08-26  104.459999  104.620003  102.839996  103.379997  103.209305\n",
       "2021-08-27  103.900002  106.150002  103.900002  106.089996  105.914825\n",
       "2021-08-30  106.330002  106.459999  104.800003  105.190002  105.016312\n",
       "2021-08-31  104.940002  106.360001  104.459999  105.410004  105.235954\n",
       "2021-09-01  105.360001  105.470001  103.260002  103.660004  103.488846\n",
       "2021-09-02  104.000000  106.339996  103.980003  106.260002  106.084557\n",
       "2021-09-03  106.000000  107.360001  104.080002  104.750000  104.577042\n",
       "2021-09-07  104.500000  104.940002  102.309998  103.290001  103.119453\n",
       "2021-09-08  102.949997  104.730003  100.419998  102.580002  102.410629\n",
       "2021-09-09  102.360001  104.919998  102.110001  103.290001  103.119453\n",
       "2021-09-10  103.290001  103.949997  101.779999  102.000000  101.831581\n",
       "2021-09-13  102.650002  104.860001  102.019997  104.459999  104.287521\n",
       "2021-09-14  104.540001  104.550003  100.070000  100.379997  100.214256\n",
       "2021-09-15  100.790001  102.470001  100.690002  102.160004  101.991325\n",
       "2021-09-16  102.389999  102.699997  100.820000  101.339996  101.172668\n",
       "2021-09-17  101.150002  101.860001  100.129997  100.470001  100.304115\n",
       "2021-09-20   98.500000   99.870003   97.269997   99.809998   99.645195\n",
       "2021-09-21   99.900002   99.989998   96.209999   96.820000   96.660133\n",
       "2021-09-22   97.669998   99.029999   97.660004   98.540001   98.377296\n",
       "2021-09-23   99.529999  104.080002   99.519997  102.959999  102.789993\n",
       "2021-09-24  102.660004  104.199997  102.599998  103.800003  103.709198\n",
       "2021-09-27  104.550003  106.330002  104.389999  105.349998  105.257835\n",
       "2021-09-28  105.290001  106.750000  104.730003  105.730003  105.637512\n",
       "2021-09-29  106.000000  107.000000  105.309998  106.279999  106.187027"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_past"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "92497be0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30, 4)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_future=pd.read_csv(\"test.csv\",parse_dates=[\"Date\"],index_col=[0])\n",
    "df_30_days_future.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "7004371c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-09-30</th>\n",
       "      <td>0</td>\n",
       "      <td>107.089996</td>\n",
       "      <td>102.949997</td>\n",
       "      <td>103.029999</td>\n",
       "      <td>102.939865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-01</th>\n",
       "      <td>0</td>\n",
       "      <td>106.389999</td>\n",
       "      <td>103.669998</td>\n",
       "      <td>105.820000</td>\n",
       "      <td>105.727425</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-04</th>\n",
       "      <td>0</td>\n",
       "      <td>107.080002</td>\n",
       "      <td>104.599998</td>\n",
       "      <td>104.900002</td>\n",
       "      <td>104.808235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-05</th>\n",
       "      <td>0</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>103.750000</td>\n",
       "      <td>104.900002</td>\n",
       "      <td>104.808235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-06</th>\n",
       "      <td>0</td>\n",
       "      <td>104.419998</td>\n",
       "      <td>102.059998</td>\n",
       "      <td>104.330002</td>\n",
       "      <td>104.238731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-07</th>\n",
       "      <td>0</td>\n",
       "      <td>106.529999</td>\n",
       "      <td>104.330002</td>\n",
       "      <td>105.510002</td>\n",
       "      <td>105.417702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-08</th>\n",
       "      <td>0</td>\n",
       "      <td>106.220001</td>\n",
       "      <td>104.660004</td>\n",
       "      <td>104.720001</td>\n",
       "      <td>104.628387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-11</th>\n",
       "      <td>0</td>\n",
       "      <td>105.760002</td>\n",
       "      <td>103.970001</td>\n",
       "      <td>104.080002</td>\n",
       "      <td>103.988953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-12</th>\n",
       "      <td>0</td>\n",
       "      <td>104.040001</td>\n",
       "      <td>101.559998</td>\n",
       "      <td>102.720001</td>\n",
       "      <td>102.630142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-13</th>\n",
       "      <td>0</td>\n",
       "      <td>103.199997</td>\n",
       "      <td>101.180000</td>\n",
       "      <td>102.360001</td>\n",
       "      <td>102.270454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-14</th>\n",
       "      <td>0</td>\n",
       "      <td>103.650002</td>\n",
       "      <td>102.370003</td>\n",
       "      <td>102.739998</td>\n",
       "      <td>102.650116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-15</th>\n",
       "      <td>0</td>\n",
       "      <td>105.900002</td>\n",
       "      <td>103.190002</td>\n",
       "      <td>104.410004</td>\n",
       "      <td>104.318665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-18</th>\n",
       "      <td>0</td>\n",
       "      <td>104.570000</td>\n",
       "      <td>103.040001</td>\n",
       "      <td>104.120003</td>\n",
       "      <td>104.028915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-19</th>\n",
       "      <td>0</td>\n",
       "      <td>104.970001</td>\n",
       "      <td>103.580002</td>\n",
       "      <td>104.730003</td>\n",
       "      <td>104.638382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-20</th>\n",
       "      <td>0</td>\n",
       "      <td>106.019997</td>\n",
       "      <td>103.870003</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>105.907272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-21</th>\n",
       "      <td>0</td>\n",
       "      <td>106.389999</td>\n",
       "      <td>103.010002</td>\n",
       "      <td>103.150002</td>\n",
       "      <td>103.059761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-22</th>\n",
       "      <td>0</td>\n",
       "      <td>104.510002</td>\n",
       "      <td>102.550003</td>\n",
       "      <td>104.050003</td>\n",
       "      <td>103.958977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-25</th>\n",
       "      <td>0</td>\n",
       "      <td>105.989998</td>\n",
       "      <td>103.330002</td>\n",
       "      <td>105.300003</td>\n",
       "      <td>105.207886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-26</th>\n",
       "      <td>0</td>\n",
       "      <td>110.970001</td>\n",
       "      <td>105.220001</td>\n",
       "      <td>107.440002</td>\n",
       "      <td>107.346008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-27</th>\n",
       "      <td>0</td>\n",
       "      <td>108.279999</td>\n",
       "      <td>103.690002</td>\n",
       "      <td>103.849998</td>\n",
       "      <td>103.759148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-28</th>\n",
       "      <td>0</td>\n",
       "      <td>105.379997</td>\n",
       "      <td>103.099998</td>\n",
       "      <td>105.260002</td>\n",
       "      <td>105.167915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-10-29</th>\n",
       "      <td>0</td>\n",
       "      <td>105.239998</td>\n",
       "      <td>104.120003</td>\n",
       "      <td>104.870003</td>\n",
       "      <td>104.778259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-01</th>\n",
       "      <td>0</td>\n",
       "      <td>106.769997</td>\n",
       "      <td>105.279999</td>\n",
       "      <td>106.230003</td>\n",
       "      <td>106.137070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-02</th>\n",
       "      <td>0</td>\n",
       "      <td>107.139999</td>\n",
       "      <td>105.300003</td>\n",
       "      <td>106.690002</td>\n",
       "      <td>106.596664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-03</th>\n",
       "      <td>0</td>\n",
       "      <td>106.339996</td>\n",
       "      <td>104.820000</td>\n",
       "      <td>105.970001</td>\n",
       "      <td>105.877296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-04</th>\n",
       "      <td>0</td>\n",
       "      <td>106.400002</td>\n",
       "      <td>104.290001</td>\n",
       "      <td>105.209999</td>\n",
       "      <td>105.117958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-05</th>\n",
       "      <td>0</td>\n",
       "      <td>109.650002</td>\n",
       "      <td>106.849998</td>\n",
       "      <td>108.739998</td>\n",
       "      <td>108.644867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-08</th>\n",
       "      <td>0</td>\n",
       "      <td>110.309998</td>\n",
       "      <td>108.320000</td>\n",
       "      <td>108.419998</td>\n",
       "      <td>108.325150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-09</th>\n",
       "      <td>0</td>\n",
       "      <td>116.169998</td>\n",
       "      <td>110.480003</td>\n",
       "      <td>111.290001</td>\n",
       "      <td>111.192642</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-11-10</th>\n",
       "      <td>0</td>\n",
       "      <td>112.680000</td>\n",
       "      <td>108.110001</td>\n",
       "      <td>108.959999</td>\n",
       "      <td>108.864677</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Open        High         Low       Close   Adj Close\n",
       "Date                                                            \n",
       "2021-09-30     0  107.089996  102.949997  103.029999  102.939865\n",
       "2021-10-01     0  106.389999  103.669998  105.820000  105.727425\n",
       "2021-10-04     0  107.080002  104.599998  104.900002  104.808235\n",
       "2021-10-05     0  106.000000  103.750000  104.900002  104.808235\n",
       "2021-10-06     0  104.419998  102.059998  104.330002  104.238731\n",
       "2021-10-07     0  106.529999  104.330002  105.510002  105.417702\n",
       "2021-10-08     0  106.220001  104.660004  104.720001  104.628387\n",
       "2021-10-11     0  105.760002  103.970001  104.080002  103.988953\n",
       "2021-10-12     0  104.040001  101.559998  102.720001  102.630142\n",
       "2021-10-13     0  103.199997  101.180000  102.360001  102.270454\n",
       "2021-10-14     0  103.650002  102.370003  102.739998  102.650116\n",
       "2021-10-15     0  105.900002  103.190002  104.410004  104.318665\n",
       "2021-10-18     0  104.570000  103.040001  104.120003  104.028915\n",
       "2021-10-19     0  104.970001  103.580002  104.730003  104.638382\n",
       "2021-10-20     0  106.019997  103.870003  106.000000  105.907272\n",
       "2021-10-21     0  106.389999  103.010002  103.150002  103.059761\n",
       "2021-10-22     0  104.510002  102.550003  104.050003  103.958977\n",
       "2021-10-25     0  105.989998  103.330002  105.300003  105.207886\n",
       "2021-10-26     0  110.970001  105.220001  107.440002  107.346008\n",
       "2021-10-27     0  108.279999  103.690002  103.849998  103.759148\n",
       "2021-10-28     0  105.379997  103.099998  105.260002  105.167915\n",
       "2021-10-29     0  105.239998  104.120003  104.870003  104.778259\n",
       "2021-11-01     0  106.769997  105.279999  106.230003  106.137070\n",
       "2021-11-02     0  107.139999  105.300003  106.690002  106.596664\n",
       "2021-11-03     0  106.339996  104.820000  105.970001  105.877296\n",
       "2021-11-04     0  106.400002  104.290001  105.209999  105.117958\n",
       "2021-11-05     0  109.650002  106.849998  108.739998  108.644867\n",
       "2021-11-08     0  110.309998  108.320000  108.419998  108.325150\n",
       "2021-11-09     0  116.169998  110.480003  111.290001  111.192642\n",
       "2021-11-10     0  112.680000  108.110001  108.959999  108.864677"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_30_days_future"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "20277ef8",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_30_days_future[\"Open\"]=0\n",
    "df_30_days_future=df_30_days_future[[\"Open\",\"High\",\"Low\",\"Close\",\"Adj Close\"]]\n",
    "old_scaled_array=scaler.transform(df_30_days_past)\n",
    "new_scaled_array=scaler.transform(df_30_days_future)\n",
    "new_scaled_df=pd.DataFrame(new_scaled_array)\n",
    "new_scaled_df.iloc[:,0]=np.nan\n",
    "full_df=pd.concat([pd.DataFrame(old_scaled_array),new_scaled_df]).reset_index().drop([\"index\"],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "0dcb1ee5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "88cfa224",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.143640</td>\n",
       "      <td>0.164162</td>\n",
       "      <td>0.150135</td>\n",
       "      <td>0.349458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.152749</td>\n",
       "      <td>0.171268</td>\n",
       "      <td>0.159953</td>\n",
       "      <td>0.367565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.154599</td>\n",
       "      <td>0.175349</td>\n",
       "      <td>0.159063</td>\n",
       "      <td>0.365924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.171024</td>\n",
       "      <td>0.181345</td>\n",
       "      <td>0.167045</td>\n",
       "      <td>0.380645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.161242</td>\n",
       "      <td>0.174766</td>\n",
       "      <td>0.160565</td>\n",
       "      <td>0.368694</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0         1         2         3         4\n",
       "55 NaN  0.143640  0.164162  0.150135  0.349458\n",
       "56 NaN  0.152749  0.171268  0.159953  0.367565\n",
       "57 NaN  0.154599  0.175349  0.159063  0.365924\n",
       "58 NaN  0.171024  0.181345  0.167045  0.380645\n",
       "59 NaN  0.161242  0.174766  0.160565  0.368694"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "e8cc462a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "48bf070f",
   "metadata": {},
   "outputs": [],
   "source": [
    "full_df_scaled_array=full_df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "id": "91fdcf82",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60, 5)"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_df_scaled_array.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "547622aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "all_data=[]\n",
    "time_step=30\n",
    "for i in range(time_step,len(full_df_scaled_array)):\n",
    "    data_x=[]\n",
    "    data_x.append(full_df_scaled_array[i-time_step:i,0:full_df_scaled_array.shape[1]])\n",
    "    data_x=np.array(data_x)\n",
    "    prediction=my_model.predict(data_x)\n",
    "    all_data.append(prediction)\n",
    "    full_df.iloc[i,0]=prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "05929d50",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[array([[0.1378213]], dtype=float32),\n",
       " array([[0.13945529]], dtype=float32),\n",
       " array([[0.14068112]], dtype=float32),\n",
       " array([[0.14162877]], dtype=float32),\n",
       " array([[0.14216018]], dtype=float32),\n",
       " array([[0.14206707]], dtype=float32),\n",
       " array([[0.1421535]], dtype=float32),\n",
       " array([[0.14225037]], dtype=float32),\n",
       " array([[0.14217126]], dtype=float32),\n",
       " array([[0.14150538]], dtype=float32),\n",
       " array([[0.14047278]], dtype=float32),\n",
       " array([[0.13954498]], dtype=float32),\n",
       " array([[0.13914707]], dtype=float32),\n",
       " array([[0.13891666]], dtype=float32),\n",
       " array([[0.13893819]], dtype=float32),\n",
       " array([[0.13930015]], dtype=float32),\n",
       " array([[0.13948296]], dtype=float32),\n",
       " array([[0.13946058]], dtype=float32),\n",
       " array([[0.13963053]], dtype=float32),\n",
       " array([[0.14062819]], dtype=float32),\n",
       " array([[0.14126904]], dtype=float32),\n",
       " array([[0.14153312]], dtype=float32),\n",
       " array([[0.1416432]], dtype=float32),\n",
       " array([[0.14201452]], dtype=float32),\n",
       " array([[0.14254372]], dtype=float32),\n",
       " array([[0.14292328]], dtype=float32),\n",
       " array([[0.14306733]], dtype=float32),\n",
       " array([[0.14389662]], dtype=float32),\n",
       " array([[0.14515653]], dtype=float32),\n",
       " array([[0.14742556]], dtype=float32)]"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "379cf40a",
   "metadata": {},
   "outputs": [],
   "source": [
    "new_array=np.array(all_data)\n",
    "new_array=new_array.reshape(-1,1)\n",
    "prediction_copies_array = np.repeat(new_array,5, axis=-1)\n",
    "y_pred_future_30_days = scaler.inverse_transform(np.reshape(prediction_copies_array,(len(new_array),5)))[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "id": "4ab9307c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([101.11468 , 101.69789 , 102.135414, 102.473656, 102.66332 ,\n",
       "       102.6301  , 102.66094 , 102.69551 , 102.66728 , 102.4296  ,\n",
       "       102.06105 , 101.7299  , 101.58788 , 101.50563 , 101.51332 ,\n",
       "       101.64251 , 101.70776 , 101.69977 , 101.76044 , 102.11652 ,\n",
       "       102.34525 , 102.43951 , 102.478806, 102.61133 , 102.80022 ,\n",
       "       102.93569 , 102.98711 , 103.2831  , 103.732796, 104.54266 ],\n",
       "      dtype=float32)"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred_future_30_days"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "265bfef0",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eed9c5c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.models import Model\n",
    "from tensorflow.keras.models import load_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0ede34e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "mymodel.save('Model_future_value.h5')\n",
    "print('Model Saved!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f12ddc7",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "13f766d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "scalerfile = 'scaler_model_future_value.pkl'\n",
    "pickle.dump(scaler, open(scalerfile, 'wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcbe5698",
   "metadata": {},
   "source": [
    "# END!!!!"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
